package test2;

/**
 * @author spf
 * @date 2024/10/16
 * @time 19:53
 */

import java.util.*;


/**
 * 用友笔试
 */
public class Main8 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * @param songs int整型一维数组 歌曲编号数组
     * @param k     int整型 最常听的歌曲数目
     * @return int整型一维数组
     */
//    public int[] favoriteSongs (int[] songs, int k) {
//        // write code here
//        Map<Integer,Integer> map = new HashMap<>();
//        for (int song : songs) {
//            map.put(song,map.getOrDefault(song,0)+1);
//        }
//
//        PriorityQueue<int[]> pq = new PriorityQueue<>(k, (a, b) -> a[1]==b[1]?b[0]-a[0]:b[1]-a[1]);
//        for(Map.Entry<Integer,Integer>  entry : map.entrySet()){
//            int song = entry.getKey();
//            int freq = entry.getValue();
//            pq.offer(new int[]{song,freq});
//            if(pq.size()>k) {
//                pq.poll();
//            }
//        }
//
//        List<Integer> result = new ArrayList<>();
//        while (!pq.isEmpty()){
//            result.add(pq.poll()[0]);
//        }
//
//        Collections.sort(result);
//
//        int[] resultArray = new int[result.size()];
//        for (int i = 0; i < result.size(); i++) {
//            resultArray[i] = result.get(i);
//        }
//
//        return resultArray;
//    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int m = sc.nextInt();
        int n = sc.nextInt();

        int[] roomCap = new int[m];
        for (int i = 0; i < m; i++) {
            roomCap[i] = sc.nextInt();
        }

        int[][] schedules = new int[n][3];
        for (int i = 0; i < n; i++) {
            schedules[i][0] = sc.nextInt();
            schedules[i][1] = sc.nextInt();
            schedules[i][2] = sc.nextInt();
        }

        boolean result = canArrange(roomCap, schedules);

        System.out.println(result);

        sc.close();
    }

    private static boolean canArrange(int[] roomCap, int[][] schedules) {
        TreeMap<Integer,Integer> timePoints = new TreeMap<>();
        for (int[] schedule : schedules) {
            int start = schedule[0];
            int end = schedule[1];
            int count = schedule[2];

            timePoints.put(start,timePoints.getOrDefault(start,0)+count);
            timePoints.put(end,timePoints.getOrDefault(end,0)-count);
        }

        int maxOcupancy = 0;
        int currentOccupancy = 0;
        for (int change: timePoints.values()) {
            currentOccupancy += change;
            if (currentOccupancy > maxOcupancy){
                maxOcupancy = currentOccupancy;
            }
        }

        int totalCap = 0;
        for (int cap : roomCap){
            totalCap += cap;
        }

        return totalCap >= maxOcupancy;
    }
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int[] arr= new int[n];
//        for (int i = 0; i < n; i++) {
//            arr[i] = sc.nextInt();
//        }
//
//        System.out.println(canWin(arr));
//    }
//
//    private static boolean canWin(int[] arr) {
//
//        int n = arr.length;
//
//        int[][] dp = new int[n][n];
//
//        for (int i = 0; i < n; i++) {
//            dp[i][i] = arr[i];
//        }
//
//        for(int length=2;length<=n;length++){
//            for(int i=0;i<=n-length;i++){
//                int j = i+length-1;
//                dp[i][j] = Math.max(arr[i]-dp[i+1][j],arr[j]-dp[i][j-1]);
//            }
//        }
//
//        return dp[0][n-1]>=0;
//    }
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//
//        int n = sc.nextInt();
//
//        int[] startTime = new int[n];
//        for (int i = 0; i < n; i++) {
//            startTime[i] = sc.nextInt();
//        }
//
//        int[] selTime = new int[n];
//        for (int i = 0; i < n; i++) {
//            selTime[i] = sc.nextInt();
//        }
//
//        int[] benefit = new int[n];
//        for (int i = 0; i < n; i++) {
//            benefit[i] = sc.nextInt();
//        }
//
//        System.out.println(maxBenefit(n, startTime, selTime, benefit));
//        sc.close();
//    }
//
//    private static int maxBenefit(int n, int[] startTime, int[] selTime, int[] benefit) {
//
//        Item[] item = new Item[n];
//        for (int i = 0; i < n; i++) {
//            item[i] = new Item(startTime[i], startTime[i] + selTime[i], benefit[i]);
//        }
//        Arrays.sort(item, Comparator.comparingInt(o -> o.endTime));
//        int[] dp = new int[n];
//        dp[0] = item[0].benefit;
//        for (int i = 1; i < n; i++){
//            dp[i] = dp[i-1];
//            int prev = binarySearch(item, i);
//            int currentBenefit = item[i].benefit;
//            if (prev != -1){
//                currentBenefit += dp[prev];
//            }
//            dp[i] = Math.max(dp[i], currentBenefit);
//        }
//
//        return dp[n-1];
//    }
//
//    private static int binarySearch(Item[] item, int i) {
//
//        int l = 0;
//        int r = i-1;
//        while (l<=r){
//            int mid = (l+r)/2;
//            if(item[mid].endTime <= item[i].startTime){
//                l = mid+1;
//            }else{
//                r = mid-1;
//            }
//        }
//
//        return r;
//    }
//
//    static class Item{
//        private int startTime;
//        private int endTime;
//        private int benefit;
//        public Item(int startTime, int endTime, int benefit){
//            this.startTime = startTime;
//            this.endTime = endTime;
//            this.benefit = benefit;
//        }
//    }
}
